Practical Statistics berisi kaidah statistika yang banyak diterapkan dalam praktik data science agar dapat memahami dan mengolah data dengan tepat. Secara umum, Practical Statistics terbagi 2, berdasarkan kegunaannya:
Berikut adalah mindmap dari Practical Statistics yang akan kita pelajari:
Untuk lebih memahami, mari kita melakukan analisis menggunakan data asli. # Study Case: Supermarket Analysis
1. Business Question
Pertumbuhan supermarket di kota-kota besar meningkat setiap tahunnya dan kompetisi pasar juga tinggi. Kita sebagai tim data diminta untuk menganalisa performa supermarket milik perusahaan. Data tersimpan dalam supermarket.RDS berisi data transaksi selama periode Januari - Maret 2019. Data bersumber dari Kaggle.
2. Read Data
Fungsi readRDS() untuk membaca file ekstensi RDS, yaitu object di R yang disimpan ke dalam sebuah file. Cara menyimpan object menjadi file RDS dengan fungsi saveRDS()
# read data
supermarket <- readRDS("data_input/Supermarket.RDS")# melihat struktur data
str(supermarket)#> 'data.frame': 1000 obs. of 17 variables:
#> $ invoice_id : chr "750-67-8428" "226-31-3081" "631-41-3108" "123-19-1176" ...
#> $ branch : Factor w/ 3 levels "A","B","C": 1 3 1 1 1 3 1 3 1 2 ...
#> $ city : Factor w/ 3 levels "Mandalay","Naypyitaw",..: 3 2 3 3 3 2 3 2 3 1 ...
#> $ customer_type : Factor w/ 2 levels "Member","Normal": 1 2 2 1 2 2 1 2 1 1 ...
#> $ gender : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 2 1 1 1 1 ...
#> $ product_line : Factor w/ 6 levels "Electronic accessories",..: 4 1 5 4 6 1 1 5 4 3 ...
#> $ unit_price : num 74.7 15.3 46.3 58.2 86.3 ...
#> $ quantity : int 7 5 7 8 7 7 6 10 2 3 ...
#> $ tax_5 : num 26.14 3.82 16.22 23.29 30.21 ...
#> $ total : num 549 80.2 340.5 489 634.4 ...
#> $ date : Date, format: "2019-01-05" "2019-03-08" ...
#> $ purchase_hour : num 13 10 13 20 10 18 14 11 17 13 ...
#> $ payment : Factor w/ 3 levels "Cash","Credit card",..: 3 1 2 3 3 3 3 3 2 2 ...
#> $ cogs : num 522.8 76.4 324.3 465.8 604.2 ...
#> $ gross_marginpct: num 4.76 4.76 4.76 4.76 4.76 ...
#> $ gross_income : num 26.14 3.82 16.22 23.29 30.21 ...
#> $ rating : num 9.1 9.6 7.4 8.4 5.3 4.1 5.8 8 7.2 5.9 ...
# Inspect data
head(supermarket, 5)Deskripsi kolom:
invoice_id: slip invoice idbranch: branch supermarket (A, B, C)city: lokasi supermarketcustomer_type: tipe pelanggan (Member/Normal)gender: gender pelangganproduct_line: kategorisasi produk (Electronic accessories, Fashion accessories, Food and beverages, Health and beauty, Home and lifestyle, Sports and travel)unit_price: harga produk dalam dollarquantity: jumlah produk yang dibeli pelanggantax_5: harga pajak 5% untuk pembelian produktotal: harga total termasuk pajakdate: tanggal pembelianpurchase_hour: jam pembelianpayment: mode pembayaran (Cash, Credit card, Ewallet)cogs: harga pokok penjualan (cost of goods sold)gross_marginpct: persentase margin penjualangross_income: gross_income dari penjualan produkrating: rating pengalaman berbelanja pelanggan (1-10)Kita akan analisis data supermarket dengan Descriptive Statistics dan Inferential Statistics.
Descriptive Statistics membantu kita menggambarkan karakteristik dari data, sehingga berguna dalam proses Exploratory Data Analysis (EDA).
Ukuran pemusatan data adalah suatu nilai yang cukup untuk mewakili seluruh nilai pada data.
Cara paling umum untuk membuat perkiraan nilai tunggal dari data yang banyak adalah dengan merata-ratakannya.
\[\frac{\sum{x_i}}{n}\]
mean()Contoh:
Berapa perkiraan rating untuk 1 transaksi di supermarket ini?
round(mean(supermarket$rating))#> [1] 7
mean(supermarket$rating)#> [1] 6.9727
Kesimpulan: Rating dari supermarket untuk masing-masing transaksi adalah 7 dari skala 1-10. Sudah bagus untuk keseluruhan transaksi (jawaban mas Vetrick).
Berapa rata-rata gross_income untuk supermarket per branch?
# gunakan aggregate
aggregate(gross_income ~ branch, supermarket, mean)Kesimpulan: Branch C adalah branch tertinggi berdasarkan
gross_income, untuk kepentingan peningkatan profit, Branch A dapat dilakukan evaluasi.
Outlier adalah nilai ekstrim yang jauh dari observasi lainnya. Nilai mean akan sangat dipengaruhi oleh kemunculan data ekstrim. Mencari nilai mean dengan data yang beroutlier mengakibatkan nilai mean menjadi tidak representatif (bias).
Contoh lain:
Ada sebuah supermarket lain di Indonesia yang merekap jumlah pengunjung bulanan. Mereka ingin menargetkan pengunjung pada bulan ke-11 dengan menggunakan data pengunjung 10 bulan terakhir.
Dengan nilai mean:
# data
pengunjung <- c(1400, 1900, 3000, 15000, 2000, 2200, 1800, 2500, 2350, 1100)
# mean
mean(pengunjung)#> [1] 3325
Cek visualisasi terkait distribusi data menggunakan histogram (akan lebih dijelaskan pada course Data Visualization)
# hist
hist(pengunjung, breaks = 25)Apakah nilai mean di atas dapat diandalkan? Ketika terdapat outlier, maka nilai mean kita menjadi bias dan tidak representatif
Kesimpulan:
Masalah ini dapat diatasi oleh nilai: - median - trimmed mean.
Median atau nilai tengah diperoleh dengan mengurutkan data terlebih dahulu kemudian mencari nilai tengah dari data.
median()Mari hitung ulang nilai pusat data pengunjung dengan median:
# mencari median secara manual
# gunakan order/sort
sort(pengunjung)#> [1] 1100 1400 1800 1900 2000 2200 2350 2500 3000 15000
pengunjung[order(pengunjung, decreasing = F)]#> [1] 1100 1400 1800 1900 2000 2200 2350 2500 3000 15000
# median
median(pengunjung)#> [1] 2100
mean(pengunjung)#> [1] 3325
Nilai mean pengunjung = 3325, sedangkan median pengunjung = 2100
Kesimpulan: Nilai mean dan median dari data kita cukup jauh. Ukuran pemusatan data yang cocok untuk data pengunjung adalah median.
Cek distribusi data (histogram akan dibahas lebih dalam di course Data Visualization):
# run chunk keseluruhan secara bersamaan
hist(pengunjung, breaks = 25)
abline(v = mean(pengunjung), col = "red")
abline(v = median(pengunjung), col = "blue")Pilihan lain bila dengan menggunakan trimmed mean, yaitu rata-rata dengan terlebih dahulu memotong x persen nilai terkecil dan terbesar dari data:
Misal kita menggunakan trimmed mean 10%, artinya: data yang sudah diurutkan akan dipotong sebesar 10% di ujung kiri dan 10% di ujung kanan. Kemudian dihitung rata-ratanya.
mean(pengunjung, trim = 0.1)#> [1] 2143.75
median(pengunjung)#> [1] 2100
mean(pengunjung)#> [1] 3325
Penentuan nilai % trim tidak ada aturan khusus. namun untuk mempertahankan informasi dari data, penggunaan %trim sebaiknya di bawah 20%.
Lalu bagimana dengan mean() dari categorical variables? Berapakah rata-rata jenis kelamin pelanggan supermarket?
mean(supermarket$gender)#> [1] NA
#median(supermarket$gender)Kesimpulan: untuk data kategorik tidak dapat menggunakan ukuran pemusatan data
meandanmedian.
Modus berguna untuk mencari nilai yang paling sering muncul (frekuensi tertinggi).
Contoh: Tipe product_line apa yang merepresentasikan supermarket?
Dengan kata lain: untuk masing-masing product_line ada berapa transaksi yang terjadi?
Bisa menggunakan fungsi table() atau summary()
names(sort(table(supermarket$product_line), decreasing = TRUE))[1]#> [1] "Fashion accessories"
Modus untuk product_line adalah Fashion accessories.
Karena tidak dapat fungsi built in, kita juga dapat membuat fungsi custom untuk mendapatkan nilai Modus.
# PENTING: run chunk keseluruhan secara bersamaan
most <- function(x){
# membuat tabel frekuensi
table_x <- table(x)
# mengurutkan tabel
sort_table_x <- sort(table_x, decreasing = TRUE)
# mengambil kategori
name <- names(sort_table_x)
# mengambil kategori dengan frekuensi terbesar
name[1]
}Menggunakan fungsi most() :
most(supermarket$product_line)#> [1] "Fashion accessories"
Dari pernyataan berikut, jawablah benar atau salah. Apabila salah, tuliskan pernyataan yang benar.
Salah, karena untuk ukuran pemusatan data
mean()menggunakan keseluruhan data. Yang menggunakan sebagian data adalah trimmed mean.
Salah, karena yang diambil nilai tengah. Yang sensitif terhadap outlier adalah nilai mean.
Benar
Ukuran penyebaran data mewakili seberapa menyebar atau beragam data kita.
Variance menggambarkan seberapa beragam suatu data numerik tunggal menyebar dari pusat datanya.
\[var = \frac{\sum(X_i - \bar{X})^2}{n-1}\]
var() Contoh:
Perusahaan toko retail sedang menyeleksi daerah mana yang cocok untuk cabang baru mereka. Mereka mengumpulkan informasi tentang harga sewa bangunan di daerah A dan daerah B.
harga_A <- c(400,410,420,400,410,420,400,410,420,400,410,420,400)
harga_B <- c(130,430,650,540,460,320,380,550,650,470,330,140,270)Setelah dibandingkan, rata-rata harga bangunan kedua daerah sama:
#rata-rata harga bangunan daerah A
mean(harga_A)#> [1] 409.2308
#rata-rata harga bangunan daerah B
mean(harga_B)#> [1] 409.2308
Mari bandingkan dari sisi lain, yaitu tingkat keberagaman data (variance). Daerah manakah yang harganya lebih bervariansi?
var(harga_A)#> [1] 74.35897
var(harga_B)#> [1] 28707.69
Apabila satuan data harga adalah rupiah, maka:
Insight: harga-harga di daerah A lebih stabil, harga harga bangunan di daerah B lebih bervariasi.
Karakteristik:
Skala variance dari 0 sampai tak hingga. Semakin besar nilainya maka artinya semakin menyebar dari pusat data (mean).
Variance memiliki satuan kuadrat, sehingga tidak dapat langsung diinterpretasikan. Biasanya digunakan untuk membandingkan dengan nilai var lain dengan satuan yang sama.
Nilai variansi sangat bergantung dengan skala data
Kasus: Di bawah ini, data mana yang lebih bervariasi?
profit_usd <- supermarket$gross_income
profit_idr <- supermarket$gross_income * 14000# cek variance profit_usd
var(profit_usd)#> [1] 137.0966
# cek variance profit_idr
var(profit_idr)#> [1] 26870932452
Diskusi: Apakah bisa kita simpulkan profit_idr lebih bervariasi daripada profit_usd?
tidak bisa menyimpulkan bahwa profit_idr lebih bervariasi. Karena keduanya memiliki satuan yang berbeda.
Note: Bila terdapat data yang range atau satuannya berbeda bisa dilakukan scaling sehingga range antar data sama atau tidak jauh berbeda. Caranya bisa menggunakan min-max normalization / standarisasi menggunakan
scale(). Hal ini akan lebih detail dibahas di course machine learning.
Standard deviation menggambarkan seberapa jauh simpangan nilai yang dianggap umum, dihitung dari titik pusat (mean) nya. Kita dapat menentukan apakah suatu nilai dikatakan menyimpang dari rata-rata namun masih dikatakan umum, atau sudah tidak umum.
Karena dihitung dengan mengakarkan variance, satuannya sudah sesuai dengan data asli dan bisa diinterpretasikan.
\[sd = \sqrt{var}\]
sd()# standar deviasi harga_A & harga_B
sd(harga_A)#> [1] 8.623165
sd(harga_B)#> [1] 169.4334
# tinjau nilai mean harga_A & harga_B
mean(harga_A)#> [1] 409.2308
mean(harga_B)#> [1] 409.2308
mean(harga_A)+sd(harga_A)#> [1] 417.8539
Interpretasi: mean +- sd (karena satuan mean dan sd sama, yaitu jutaan rupiah)
Apabila kita ditawarkan suatu bangungan di daerah B dengan harga 800, apakah harga tersebut masih wajar? Apakah sebaiknya kita membeli bangunan tersebut? Hubungkan dengan nilai mean dan standar deviasi yang diperoleh.
menghitung range “harga normal” daerah B:
# hitung batas bawah dan atas dari harga wajar daerah B
409.2308 - 169.4334#> [1] 239.7974
409.2308 + 169.4334#> [1] 578.6642
Kesimpulan: Harga tersebut terlalu jauh dari harga normalnya, sehingga harga tersebut dikategorikan sebagai harga tidak wajar. Dan sebaiknya tidak perlu membelinya.
DIVE DEEPER: Diskusi
saham_A dan saham_B selama 20 periode terakhir.saham_A <- c(1000,1200,1150,1000,950,900,1200,1300,1400,1450,1500,1600,1400,1250,1400,1600,1700,1300,1400,1300)
saham_B <- c(1300,1350,1320,1310,1280,1230,1250,1260,1280,1300,1320,1340,1300,1270,1280,1300,1320,1400,1300,1290)Rany adalah seorang investor pemula. Bantulah Rany untuk menentukan saham mana yang lebih baik dipilih untuk investasi! Gunakan nilai mean dan standar deviasi.
Berapa rata-rata harga tiap saham?
mean(saham_A)#> [1] 1300
mean(saham_B)#> [1] 1300
Berapa standar deviasi harga tiap saham?
sd(saham_A)#> [1] 223.6068
sd(saham_B)#> [1] 37.41657
Saham mana yang memiliki volatilitas lebih tinggi?
Saham A, karena standar deviasinya lebih tinggi
Note: Volatilitas menunjukkan seberapa fluktuatif (naik/turunnya) sebuah nilai saham
Kesimpulan: rany itu adalah risk taker ambil saham A, akan tetapi apabila rany adalah risk avoider, ambil saham B.
a. Saya sebagai investor pemula tidak memiliki modal yang banyak untuk membeli saham dan ingin memilih saham dengan resiko rendah. Bagaimana keadaan harga saham yang saya harapkan?
b. Saya sebagai tim marketing di suatu supermarket tentunya ingin memperoleh profit semaksimal mungkin. Bagaimana keadaan profit yang saya harapkan?
c. Saya sebagai student di Algoritma yang akan mengerjakan quiz untuk keseluruhan course. Bagaimana keadaan score quiz yang saya harapkan?
Five number summary (ringkasan lima angka) adalah satu set statistika deskriptif numerik yang terdiri dari lima angka:
Gunakan fungsi summary() untuk merangkum nilai sebaran data tersebut.
Contoh:
Deskripsikan distribusi gross_income dari data supermarket
summary_supermarket <- summary(supermarket$gross_income)
#jawaban mas Rangga (menggunakan indexing)
summary_supermarket[6] - summary_supermarket[1]#> Max.
#> 49.1415
Dari summary tersebut, kita bisa mengetahui nilai sebaran:
#range
range(supermarket$gross_income)#> [1] 0.5085 49.6500
#menggunakan fungsi min dan max
max(supermarket$gross_income) - min(supermarket$gross_income)#> [1] 49.1415
Range dari gross_income adalah 49.1415
#IQR
IQR(supermarket$gross_income)#> [1] 16.52037
IQR dari gross income adalah 16.52037
Distribusi data numerik pada umumnya divisualisasikan dengan boxplot, yang meliputi komponen:
Beberapa hal yang harus diperhatikan dalam boxplot:
Insight yang dapat diperoleh dari boxplot:
Contoh:
Visualisasikan sebaran data gross_income dari data supermarket dengan boxplot()! Analisis informasi yang didapatkan.
boxplot(supermarket$gross_income, horizontal = T)(Ya)
(Median) -> karena data memiliki outlier
Distribusi (skewed) - > right skewed , karena banyak data/observasi yang jatuh di nilai-nilai kecil.
Contoh lain:
Analisis sebaran data gross_income di tiap purchase_hour berikut. Distribusi data yang paling diharapkan jatuh pada jam berapa?
boxplot(formula = gross_income ~ purchase_hour, data = supermarket)Insight:
Dari pernyataan berikut, jawablah benar atau salah. Apabila salah, tuliskan pernyataan yang benar.
Salah, yang bisa di interpretasikan langsung adalah standar deviasi
Benar
Benar
Ukuran yang digunakan untuk melihat hubungan linear antara dua variabel numerik.
Covariance menunjukkan bagaimana variansi 2 data (variable yang berbeda) bergerak bersamaan.
\[Cov(X, Y) = \frac{1}{n-1}\sum\limits^n_{i=1}(X_i - \mu_X)(Y_i - \mu_Y)\]
cov()Contoh:
Hitunglah covariance antara saham_A dan saham_B! Bagaimana hubungannya?
#cov
cov(saham_A, saham_B)#> [1] 2657.895
Interpretasi nilai: Nilai covariance menunjukkan hubungan yang positif
Kelemahan: Seperti variance, covariance tidak memiliki batasan nilai untuk mengukur kekuatan hubungan antar dua variabel (-inf s.d inf), sehingga kita hanya bisa mengetahui apakah hubungannya positif atau negatif. Oleh karena itu, hadir correlation.
Correlation memampatkan nilai covariance yang dari -inf s.d inf menjadi -1 s.d 1 sehingga bisa diukur kekuatan hubungan antar data (variable).
\[Cor(X,Y) = \frac{Cov(X,Y)}{\sqrt{Var(X)Var(Y)}}\]
Fungsi di R: cor()
Nilai korelasi mengindikasikan kekuatan hubungan antara dua variable numerik sebagai berikut:
Bila korelasi dua variable numerik mendekati: * -1 artinya korelasi negatif kuat * 0 artinya tidak berkorelasi * 1 artinya korelasi positif kuat
Contoh:
Adakah korelasi antara saham_A dan saham_B, bagaimana hubungan dan kekuatannya?
#cor
cor(saham_A, saham_B)#> [1] 0.3176792
Jawaban: Nilai korelasinya cenderung kecil / kekuatan korelasi = weak correlation (hubungan korelasi yang lemah)
Visualisasi korelasi dengan scatter plot:
# scatter plot
# run seluruh code bersamaan
plot(saham_A, saham_B)
abline(lm(saham_B ~ saham_A), # garis linear `lm` akan dibahas di Machine Learning
col = 'red') # warna garisIlustrasi correlation:
————-END OF DAY 1—————–
————-START OF DAY 2—————
Dive Deeper!
Rany adalah seorang investor dan memiliki modal untuk membeli dua saham sekaligus. Rany telah mengumpulkan data historis 5 saham potensial dan melihat pergerakannya:
Melihat matriks korelasi antar saham dengan fungsi cor()
# buat matriks korelasi data
cor(saham)#> saham_A saham_B saham_C saham_D saham_E
#> saham_A 1.0000000 0.31767918 -0.202135392 0.434056705 1.0000000
#> saham_B 0.3176792 1.00000000 0.014539664 -0.112781955 0.3176792
#> saham_C -0.2021354 0.01453966 1.000000000 -0.005651362 -0.2021354
#> saham_D 0.4340567 -0.11278195 -0.005651362 1.000000000 0.4340567
#> saham_E 1.0000000 0.31767918 -0.202135392 0.434056705 1.0000000
Visualisasi korelasi dapat menggunakan fungsi ggcorr() (visualisasi heatmap) dari package GGally:
# install package di console:
# install.packages("GGally")
# load library:
library(GGally)
# visualisasi:
ggcorr(saham, label = T)Diskusi: 1. Berdasarkan korelasi di atas, saham dengan karakteristik apa yang harus Rany beli?
Korelasi antar saham: untuk nilai korelasi yang tinggi (antara saham A dan saham E), dibeli apabila rany memiliki profil resiko pemberani (risk taker) -> Pak Purwanto dan Mas Peter Beli saham yang tidak memiliki korelasi (antara saham B dan saham C), untuk menghindari resiko.
Saham memiliki variansi: ketika rany risk taker -> ambil nilai variansi antar saham yang tinggi, ketika rany risk avoider -> ambil nilai variansi antar saham yang rendah
A-E (untuk profil rany risk taker), namun untuk gabungan saham lainnya (dibeli untuk profil yang risk avoider).
Jika kedua variabel berkorelasi, belum tentu kedua variabel tersebut menunjukkan hubungan sebab akibat.
Pada contoh sebelumnya, saham_A dan saham_E memiliki perfect positive correlation. Namun belum tentu saham_A yang mengakibatkan naik atau turunnya harga saham_E, maupun sebaliknya. Kedua variabel memiliki korelasi kuat namun belum tentu menunjukkan hubungan sebab akibat.
Contoh lainnya yang menarik: https://www.tylervigen.com/spurious-correlations
Dari pernyataan berikut, jawablah benar atau salah. Apabila salah, tuliskan pernyataan yang benar.
Benar
Benar
Benar, scatter plot hanya dapat digunakan untuk menggambarkan 2 variabel dengan tipe data numerik.
Inferential Statistics membantu kita menarik kesimpulan tentang keseluruhan data (populasi) dengan menggunakan sebagian informasinya saja (sampel). Aplikasi inferensial statistik misalnya pada prediksi hasil pemilu dengan quick count.
Setiap data memiliki distribusi. Distribusi data yang spesial dan berperan dalam inferential statistics adalah distribusi normal.
Karakteristik:
Distribusi normal banyak digunakan pada inferensial statistik karena dicetuskannya Central Limit Theorem.
Semakin bertambahnya jumlah sampel yang diambil secara acak (random), maka distribusi rata-rata sampel akan mengikuti distribusi normal.
Kunjungi link berikut untuk mengerti lebih dalam terkait Central Limit Theorem melalui animasi: https://seeing-theory.brown.edu/probability-distributions/index.html
Karakteristik distribusi normal inilah yang dimanfaatkan untuk penghitungan inferensial statistik:
Contoh:
Dari data supermarket, berapa peluang (proporsi) pelanggan membeli produk dari product_line Health and Beauty?
hint: gunakan fungsi table()/ fungsi prop.table() * table() membuat tabel frekuensi (count) * prop.table() membuat tabel proporsi dari tabel frekuensi
table(supermarket$product_line)#>
#> Electronic accessories Fashion accessories Food and beverages
#> 170 178 174
#> Health and beauty Home and lifestyle Sports and travel
#> 152 160 166
nrow(supermarket)#> [1] 1000
# cara lain menggunakan prop.table
prop.table(table(supermarket$product_line))#>
#> Electronic accessories Fashion accessories Food and beverages
#> 0.170 0.178 0.174
#> Health and beauty Home and lifestyle Sports and travel
#> 0.152 0.160 0.166
product_line hampir seluruhnya memiliki peluang yang sama untuk dibeli oleh pelanggan.Menghitung probability data kontinu, contohnya:
Memanfaatkan distribusi normal (standar normal baku)
Tahapan:
Formula Z-score:
\[Z = \frac{x-\mu}{\sigma}\]
Keterangan:
Z-score merupakan sebuah nilai yang merepresentasikan berapa standard deviasi data tersebut menyimpang dari rata-ratanya
Contoh
Tinggi badan pria dewasa di Indonesia berdistribusi normal dengan rata-rata 165 cm dan standar deviasi 10 cm. Berapa peluang pria dewasa di Indonesia memiliki tinggi badan > 180 cm?
Diketahui:
# cara 1: hitung Z-score lalu ubah jadi peluang
Z <- (180-165)/10
Z#> [1] 1.5
pnorm(Z, lower.tail = F)#> [1] 0.0668072
# cara 2: langsung dengan fungsi pnorm
pnorm(180, mean = 165, sd = 10, lower.tail = F)#> [1] 0.0668072
Note: * lower.tail = F -> mencari peluang yang lebih tinggi dari titik data * lower.tail = T -> mencari peluang yang lebih rendah dari titik data
Jawaban: Peluang pria dewasa di Indonesia memiliki tinggi badan > 180 cm adalah 0.0668
DIVE DEEPER
Mari gunakan data supermarket yang kita punya.
cogs tertentu.Jawablah pertanyaan berikut apabila diasumsikan cogs berdistribusi secara normal:
cogs kurang dari 100?Langkah:
# hitung mean
mean_cogs <- mean(supermarket$cogs)
mean_cogs#> [1] 307.5874
# hitung standar deviasi
sd_cogs <- sd(supermarket$cogs)
sd_cogs#> [1] 234.1765
# hitung peluang cogs < 100
pnorm(100, mean_cogs, sd_cogs, lower.tail = T)#> [1] 0.1876857
Jawaban: Peluang produk dengan HPP lebih kecil 100 adalah 0.1876857
cogs di antara 150-500?# hitung peluang untuk batas atas dan batas bawah
#mas peter
p_score_max_peter <- pnorm(q = 500, mean_cogs, sd_cogs, lower.tail = F)
#pak purwanto
p_score_max <- pnorm(q = 500, mean_cogs, sd_cogs, lower.tail = T)
# hitung z-score batas bawah
p_score_min <- pnorm(q = 150, mean_cogs, sd_cogs, lower.tail = T)
# hitung peluang
p_score_max - p_score_min#> [1] 0.5438719
Kesimpulannya: Peluang produk dengan HPP di antara 150-500 adalah 0.5438719
Confidence interval (selang kepercayaan) berguna untuk menduga nilai mean populasi dengan sebuah interval. Menebak dengan sebuah interval akan meminimalisir error dibandingkan hanya dengan menebak satu nilai.
\[CI = \bar{x} \pm Z_{\frac{\alpha}{2}}*SE\]
SE mengukur kebaikan sampel dalam mewakilkan populasi. Semakin kecil, maka sampel semakin representatif (baik).
\[SE = \frac{\sigma}{\sqrt n}\]
Contoh:
Tomy seorang pemilik supermarket memiliki ratusan cabang di Indonesia. Ia ingin menetapkan target profit bulanan dengan mengambil data dari 25 cabang yang standar deviasi populasinya sebesar 350. Ternyata didapatkan rata-rata sampel profit sebesar 5000. Asumsi berdistribusi normal.
Berapakah confidence interval untuk rata-rata profit seluruh cabang? Gunakan tingkat kepercayaan 95%
# stdev populasi dibagi akar n
SE <- 350/sqrt(25)
SE#> [1] 70
alpha <- 0.05
alpha#> [1] 0.05
alpha dibagi 2 karena ingin membuat batas bawah dan batas atas (dalam dunia statistika dikenal sebagai two-tailed)
Z <- 0.025
qnorm(Z)#> [1] -1.959964
Notes:
pnorm() untuk mencari peluang (p) dari sebuah titik di normal baku (q)qnorm() untuk mencari titik di normal baku (q) dari sebuah peluang (p)# batas bawah
batas_bawah <- 5000-(-1.959964*SE)
batas_bawah #> [1] 5137.197
# batas atas
batas_atas <- 5000+(-1.959964*SE)
batas_atas#> [1] 4862.803
Kesimpulan: dengan tingkat keyakinan 95%, maka interval rata-rata profit yang dijadikan target untuk setiap cabang adalah 4862 - 5137. . ## Hypothesis Testing
Uji hipotesis bertujuan untuk menguji dugaan. Uji hipotesis sering disebut juga sebagai uji signifikansi yang digunakan untuk menguji apakah suatu treatment memberikan perubahan/pengaruh signifikan terhadap suatu kondisi.
Istilah-istilah:
Pengambilan kesimpulan:
Contoh hipotesis:
Uji hipotesis yang menggunakan Z-test bila:
KASUS 1
Lozy merupakan sebuah bisnis online yang bergerak di bidang fashion. Bila diketahui rata-rata likes dari suatu post di platform mereka sebesar 14000 likes dengan standar deviasi 5000 likes.
Demi meningkatkan likes dari tiap post, Lozy memutuskan untuk menggunakan influencer sebagai model pemasaran produk. Setelah menggunakan influencer, diambil 50 postingan acak yang ternyata memiliki rata-rata likes 15500.
Sebagai tim marketing, analisis apakah influencer tersebut meningkatkan customer engagement (dari segi rata-rata likes) secara signifikan, atau tidak? Gunakan tingkat kepercayaan 95%.
alpha ->
Jawaban:
I. Tentukan hipotesis
II. Hitung nilai statistik
Diketahui nilai deskriptif statistika:
Ditentukan oleh penguji:
\[Z = \frac{\bar X-\mu}{SE}\]
\[SE = \frac{\sigma}{\sqrt n}\]
Z = (rata2 sampel - rata2 populasi) / standar error Standar error = standar deviasi populasi / akar dari banyak sampel
# z-hitung
SE_lozzy <- 5000/sqrt(50)
Z_lozzy <- (15500-14000)/SE_lozzy
Z_lozzy#> [1] 2.12132
# p-value
p_value <- pnorm(Z_lozzy, lower.tail = F)
p_value#> [1] 0.01694743
III. Bandingkan P-value dengan alpha
Pengambilan kesimpulan:
p-value 0.01694743 alpha 0.05 maka TOLAK H0
IV. Kesimpulan
Dengan menggunakan tingkat keyakinan 95%, penggunaan jasa influencer memberikan peningkatan terhadap rata-rata likes.
KASUS 2
Sebuah pabrik susu bubuk melakukan pengecekan terhadap berat produk mereka. Sebelumnya diketahui bahwa rata-rata berat bersih susu adalah 1000 gram (tertera pada label produk) dan standar deviasi sebesar 30 gram.
Diambil sampel sebanyak 100 kaleng dari yang beredar di pasaran dan diperoleh rata-rata berat bersih sebesar 995 gram.
Apakah benar bahwa berat bersih susu bubuk sudah sesuai dengan kriteria? Ujilah dengan tingkat signifikansi 5%.
Jawab:
I. Tentukan hipotesis
II. Hitung nilai statistik
Diketahui:
# cari Z-hitung
SE_susu <- 30/sqrt(100)
SE_susu#> [1] 3
Z_susu <- (995-1000)/SE_susu
Z_susu#> [1] -1.666667
# cari P-value
pnorm(Z_susu, lower.tail = T)#> [1] 0.04779035
III. Bandingkan P-value dengan alpha
Uji dua arah, sehingga alpha dibagi dua menjadi 0.025
p-value 0.0477 > alpha (0.025)
IV. Kesimpulan
Dengan menggunakan tingkat keyakinan 95%, maka H0 gagal tolak sehingga berat bersih susu adalah 1000 gr atau sudah sesuai dengan kriteria.
Uji hipotesis yang menggunakan t-test bila:
Bentuk t-distribution mirip dengan normal distribution, hanya saja lebih landai ketika jumlah sampel sedikit:
Contoh:
Quicker merupakan startup yang bertugas untuk membantu para startup lain mendapatkan dana hibah dari pemerintah. Umumnya, lama proses penyerahan berkas hingga dana dicairkan adalah 215 hari.
Dikumpulkan data durasi proses pencairan dana dari 10 perusahaan startup yang menggunakan jasa Quicker sebagai berikut:
duration <- c(201, 200, 215, 212, 246, 220, 205, 195, 190, 200)Apakah Quicker bisa secara signifikan mempercepat durasi pencairan dana hibah Gunakan tingkat kepercayaan 97%.
Jawab:
I. Tentukan hipotesis
II. Hitung P-value dengan t.test()
# t.test(data_sampel, mu = mean, alternative = arah_pengujian_di_H1)
t.test(duration, mu = 215, alternative = "less")#>
#> One Sample t-test
#>
#> data: duration
#> t = -1.297, df = 9, p-value = 0.1134
#> alternative hypothesis: true mean is less than 215
#> 95 percent confidence interval:
#> -Inf 217.7279
#> sample estimates:
#> mean of x
#> 208.4
III. Bandingkan P-value dengan alpha
p-value (0.1134) > alpha (0.03), maka H0 gagal ditolak.
IV. Kesimpulan
Dengan menggunakan tingkat kepercayaan 95% dapat disimpulkan bahwa Quicker tidak mempercepat durasi pencairan hibah.
Descriptive Statistics: https://courses.lumenlearning.com/suny-natural-resources-biometrics/chapter/chapter-1-descriptive-statistics-and-the-normal-distribution/
Dealing with small data set: https://measuringu.com/small-n/
t-Distribution and some case examples: https://stattrek.com/probability-distributions/t-distribution.aspx